/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package trabalho;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

/**
 *
 * @author Felipe
 */
public class IndexaBase {

    private Directory indexDirectory;

    public Directory getIndexDirectory() {
        return indexDirectory;
    }

    public void setIndexDirectory(Directory indexDirectory) {
        this.indexDirectory = indexDirectory;
    }
    
    public IndexaBase(Analyzer analyzer, ArrayList<Documento> documentos) {
        try {
            // Cria o analyzador  
            //analyzer = new StandardAnalyzer(Version.LUCENE_47);
            analyzer = new MeuAnalisador();

            // Diretório virtual para o índice  
            indexDirectory = new RAMDirectory();

            // Cria uma configuração de Indice
            IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_47, analyzer);
            iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);

            // Cria o arquivo com tamanho ilimitado.
            IndexWriter w = new IndexWriter(indexDirectory, iwc);

            
            Document doc = new Document();
            //modificado por jayme
            System.out.println("Indexando Documentos...");
            for (Documento documento : documentos) {
                indexDocs(w, documento);
                //System.out.println("Doc: "+documento.getIdentificador());
            }
            System.out.println("Base Indexada!");
            // Fecha o arquivo.  
            w.close();

        } catch (IOException ex) {
            Logger.getLogger(Trabalho.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    
    public void indexDocs(IndexWriter writer, Documento documento) throws IOException {

        // novo documento
        Document doc = new Document();

        // novo campo
        Field identificador = new StringField("identificador", Integer.toString(documento.getIdentificador()), Field.Store.YES);
        doc.add(identificador);

        doc.add(new StringField("titulo", documento.getTitulo(), Field.Store.YES));
        doc.add(new TextField("conteudo", documento.getConteudo(), Field.Store.YES));
        doc.add(new StringField("autor", documento.getAutor(), Field.Store.YES));
        doc.add(new StringField("data", documento.getData(), Field.Store.NO));
        doc.add(new StringField("publicadoem", documento.getPublicadoEm(), Field.Store.NO));
        doc.add(new StringField("x", documento.getX(), Field.Store.NO));

        if (writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE) {
            
            //System.out.println("Adicionando: " + documento.getIdentificador());//coment jayme
            writer.addDocument(doc);
        
        } else {

            //System.out.println("Atualizando: " + documento.getIdentificador());//coment jayme
            writer.updateDocument(new Term("identificador", Integer.toString(documento.getIdentificador())), doc);
        }
          
    }
    
    
    
}
